/*
 * 官网地站:http://www.mob.com
 * 技术支持QQ: 4006852216
 * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）
 *
 * Copyright (c) 2013年 mob.com. All rights reserved.
 */

package cn.sharesdk.onekeyshare.theme.skyblue;

import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.EditPageFakeActivity;
import cn.sharesdk.onekeyshare.PicViewer;

import static com.mob.tools.utils.R.getIdRes;
import static com.mob.tools.utils.R.getLayoutRes;
import static com.mob.tools.utils.R.getStringRes;

/** 执行图文分享的页面，此页面不支持微信平台的分享 */
public class EditPage extends EditPageFakeActivity implements OnClickListener, TextWatcher {
  private static final int MAX_TEXT_COUNT = 140;

  // 字数计算器
  private TextView textCounterTextView;
  private EditText titleEditText;
  private EditText textEditText;

  public void onCreate() {
    if (shareParamMap == null || platforms == null) {
      finish();
      return;
    }

    activity.setContentView(getLayoutRes(activity, "skyblue_editpage"));
    initView();
  }

  private void initView() {
    if (!dialogMode) {
      RelativeLayout mainRelLayout = findViewByResName("mainRelLayout");
      RelativeLayout.LayoutParams lp =
          (RelativeLayout.LayoutParams) mainRelLayout.getLayoutParams();
      lp.setMargins(0, 0, 0, 0);
      lp.height = RelativeLayout.LayoutParams.MATCH_PARENT;
      mainRelLayout.setLayoutParams(lp);
    }
    initTitleView();
    initBodyView();
    initImageListView();
  }

  private void initTitleView() {
    View backImageView = findViewByResName("backImageView");
    backImageView.setTag("close");
    backImageView.setOnClickListener(this);

    View okImageView = findViewByResName("okImageView");
    okImageView.setTag("ok");
    okImageView.setOnClickListener(this);
  }

  private void initBodyView() {
    View closeImageView = findViewByResName("closeImageView");
    closeImageView.setTag("close");
    closeImageView.setOnClickListener(this);

    if (shareParamMap.containsKey("title")) {
      titleEditText = findViewByResName("titleEditText");
      titleEditText.setText(String.valueOf(shareParamMap.get("title")));
    }

    textCounterTextView = findViewByResName("textCounterTextView");
    textCounterTextView.setText(String.valueOf(MAX_TEXT_COUNT));

    textEditText = findViewByResName("textEditText");
    textEditText.addTextChangedListener(this);
    textEditText.setText(String.valueOf(shareParamMap.get("text")));

    initAtUserView();
  }

  private void initAtUserView() {
    LinearLayout atLayout = findViewByResName("atLayout");
    for (Platform platform : platforms) {
      String platformName = platform.getName();
      if (isShowAtUserLayout(platformName)) {
        View view = LayoutInflater.from(activity)
            .inflate(getLayoutRes(activity, "skyblue_editpage_at_layout"), null);
        TextView atDescTextView =
            (TextView) view.findViewById(getIdRes(activity, "atDescTextView"));
        TextView atTextView = (TextView) view.findViewById(getIdRes(activity, "atTextView"));

        OnClickListener atBtnClickListener = new OnClickListener() {
          public void onClick(View v) {
            FollowListPage subPage = new FollowListPage();
            subPage.setPlatform((Platform) v.getTag());
            subPage.showForResult(activity, null, EditPage.this);
          }
        };
        atTextView.setTag(platform);
        atTextView.setOnClickListener(atBtnClickListener);
        atDescTextView.setTag(platform);
        atDescTextView.setOnClickListener(atBtnClickListener);

        atTextView.setText(getAtUserButtonText(platformName));
        atDescTextView.setText(getContext().getString(getStringRes(activity, "list_friends"),
            getLogoName(platformName)));

        atLayout.addView(view);
      }
    }
  }

  private void initImageListView() {
    final HorizontalScrollView hScrollView =
            findViewByResName("hScrollView");
    ImageListResultsCallback callback = new ImageListResultsCallback() {

      @Override public void onFinish(ArrayList<ImageInfo> results) {
        if (results == null) return;
        LinearLayout layout = findViewByResName("imagesLinearLayout");
        for (ImageInfo imageInfo : results) {
          if (imageInfo.bitmap == null) continue;
          layout.addView(makeImageItemView(imageInfo));
        }
      }
    };
    if (!initImageList(callback)) {
      hScrollView.setVisibility(View.GONE);
    }
  }

  private View makeImageItemView(final ImageInfo imageInfo) {
    final View view = LayoutInflater.from(activity)
        .inflate(getLayoutRes(activity, "skyblue_editpage_inc_image_layout"), null);

    ImageView imageView = (ImageView) view.findViewById(getIdRes(activity, "imageView"));
    imageView.setImageBitmap(imageInfo.bitmap);
    imageView.setOnClickListener(new OnClickListener() {
      @Override public void onClick(View view) {
        PicViewer pv = new PicViewer();
        pv.setImageBitmap(imageInfo.bitmap);
        pv.show(activity, null);
      }
    });

    View removeBtn = view.findViewById(getIdRes(activity, "imageRemoveBtn"));
    removeBtn.setTag(imageInfo);
    removeBtn.setOnClickListener(new OnClickListener() {
      @Override public void onClick(View v) {
        view.setVisibility(View.GONE);
        removeImage((ImageInfo) v.getTag());
      }
    });

    return view;
  }

  public void onClick(View v) {
    if (v.getTag() == null) return;
    String tag = (String) v.getTag();
    if (tag.equals("close")) {
      // 取消分享的统计
      for (Platform plat : platforms) {
        ShareSDK.logDemoEvent(5, plat);
      }
      finish();
      return;
    }

    if (tag.equals("ok")) {
      onShareButtonClick(v);
      return;
    }
  }

  private void onShareButtonClick(View v) {
    if (shareParamMap.containsKey("title")) {
      String title = titleEditText.getText().toString().trim();
      shareParamMap.put("title", title);
    }

    String text = textEditText.getText().toString().trim();
    shareParamMap.put("text", text);

    setResultAndFinish();
  }

  public void beforeTextChanged(CharSequence s, int start, int count, int after) {

  }

  public void onTextChanged(CharSequence s, int start, int before, int count) {
    int remain = MAX_TEXT_COUNT - textEditText.length();
    textCounterTextView.setText(String.valueOf(remain));
    textCounterTextView.setTextColor(remain > 0 ? 0xffcfcfcf : 0xffff0000);
  }

  public void afterTextChanged(Editable s) {

  }

  public void onResult(HashMap<String, Object> data) {
    String atText = getJoinSelectedUser(data);
    if (atText != null) {
      textEditText.append(atText);
    }
  }

  public boolean onFinish() {
    textCounterTextView = null;
    textEditText = null;
    titleEditText = null;
    return super.onFinish();
  }
}
